package W327;

/**
 * 题目 ：正整数和负整数的最大计数
 * 题目详述：
 * 给你一个按 非递减顺序 排列的数组 nums ，返回正整数数目和负整数数目中的最大值。
 * 换句话讲，如果 nums 中正整数的数目是 pos ，而负整数的数目是 neg ，返回 pos 和 neg二者中的最大值。
 * 注意：0 既不是正整数也不是负整数。
 *
 * 提示：
 * 1 <= nums.length <= 2000
 * -2000 <= nums[i] <= 2000
 * nums 按 非递减顺序 排列。
 */
public class MaximumCount {
    public int maximumCount(int[] nums) {
        // 非递减，即代表了数组nums是按照递增顺序进行排序的
        int leftGet = leftGet(nums,0 , nums.length - 1);
        int rightGet = rightGet(nums,0 , nums.length - 1);
        return Math.max(leftGet + 1, nums.length - rightGet);
//        int leftGet = 0;
//        int rightGet = 0;
//        for (int num : nums) {
//            if(num < 0 ){
//                leftGet++;
//            }
//            else if(num > 0){
//                rightGet++;
//            }
//        }
//        return Math.max(leftGet , rightGet);
    }

    private int rightGet(int[] nums, int start , int end) {
        while(start <= end){
            int middle = start + ((end - start)>>1);
            if(nums[middle] > 0){
                end = middle - 1;
            }
            else if(nums[middle] < 0){
                start = middle + 1;
            }
            else if(nums[middle] == 0){
                start = middle + 1;
            }
        }
        System.out.println("rightStart" + start + "   " + "rightEnd" + end);
        return start;
    }

    private int leftGet(int[] nums, int start , int end) {
        while(start <= end){
            int middle = start + ((end - start)>>1);
            if(nums[middle] > 0){
                end = middle - 1;
            }
            else if(nums[middle] < 0){
                start = middle + 1;
            }
            else if(nums[middle] == 0){
                end = middle - 1;
            }
        }
        System.out.println("leftStart" + start + "   " + "leftEnd" + end);
        return end;
    }


}
